Excel Datei aus R/3 erzeugen
Mit diesem Programm ist es möglich, eine Excel-Datei zu erzeugen. Excel wird dabei ‘unsichtbar’ gestartet. Der Anwender bekommt davon also nichts mit, sofern er nicht gerade die Windows-Prozessliste studiert…
Das folgende Programm erzeugt eine Exceldatei und speichert sie ab. Excel wird dabei nicht sichtbar gestartet! Der Anwender bekommt von dem Vorgang also nichts mit.
Das Programm hat so gut wie keine Fehlerbehandlung! Einzig wird abgefragt, ob das Objekt “Excel” erzeugt werden konnte.
Als Standard-Demoprogramm existiert RSDEMO01. Hier wird Excel sichtbar gestartet und mit Flugdaten gefüllt. Die Datei wird nicht gespeichert.
REPORT. TYPE-POOLS ole2. DATA: excel TYPE ole2_object, mapl TYPE ole2_object, " list of workbooks workbook TYPE ole2_object, " Workbook map TYPE ole2_object. " Mappe CREATE OBJECT excel 'EXCEL.APPLICATION'. IF sy-subrc NE 0. WRITE : / 'Fehler CREATE OBJECT'. ELSE. SET PROPERTY OF excel 'Visible' = 0. "nicht sichtbar CALL METHOD OF excel 'Workbooks' = workbook. CALL METHOD OF workbook 'Add' = map. PERFORM fill_cell USING 1 1 1 3 'TRICKTRESOR'. PERFORM fill_cell USING 2 1 1 1 'https://tricktresor.com'. PERFORM fill_cell USING 5 1 1 3 'Datum'. PERFORM fill_cell USING 5 2 0 5 sy-datum. PERFORM fill_cell USING 6 1 1 3 'Uhrzeit'. PERFORM fill_cell USING 6 2 0 5 sy-uzeit. CALL METHOD OF map 'SaveAs' EXPORTING #1 = 'd:\temp\test1.xls'. CALL METHOD OF workbook 'CLOSE'. CALL METHOD OF excel 'QUIT'. FREE OBJECT workbook. FREE OBJECT excel. ENDIF. *---------------------------------------------------------------------* * FORM FILL_CELL * *---------------------------------------------------------------------* * –> I Zeile * * –> J Spalte * * –> BOLD Fett=1, Normal=0 * * –> COL Farbe: * * 1=Schwarz, 2=weiss, 3=rot, 4=grün, 5=blau, 6=gelb * * –> VAL Wert * *---------------------------------------------------------------------* FORM fill_cell USING i j bold col val. DATA: h_zl TYPE ole2_object, " cell h_f TYPE ole2_object. " font CALL METHOD OF excel 'Cells' = h_zl EXPORTING #1 = i #2 = j. SET PROPERTY OF h_zl 'Value' = val . GET PROPERTY OF h_zl 'Font' = h_f. SET PROPERTY OF h_f 'Bold' = bold . SET PROPERTY OF h_f 'ColorIndex' = col. "Rot SET PROPERTY OF h_f 'Size' = 16. ENDFORM.
Verfügbar auf Github: https://github.com/tricktresor/demo mit abapGit.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024
Hallo
vielen Dank für das tolle Beispiel. Ich konnte es sehr gut verwenden.
Ich habe ein Programm geschrieben, welches in einem Loop 150 Excel-Files schreibt. Mir ist aufgefallen, dass wenn ich untenstehenden Code 100x aufrufe, in der Win-Taskliste am Schluss Excel 150x aufgeführt ist. Diese verschwinden erst, wenn der Modus beendet wird.
Wenn ich den Loop zwischen “CREATE OBJECT Excel” und “FREE OBJECT excel” setze, habe ich nur einen Task, aber der benötigt dann gegen 1 GB Memory.
Grundsätzlich funktioniert ja alles, aber mich würde interessieren, welches eine saubere 🙂 Lösung ist, da die eigentlichen Files recht schlank sind. Kann mir jemand helfen?
Vielen Dank
Chris
CREATE OBJECT excel ‘EXCEL.APPLICATION’.
…
SET PROPERTY OF excel ‘Visible’ = 0. “nicht sichtbar
CALL METHOD OF excel ‘Workbooks’ = workbook.
CALL METHOD OF workbook ‘Add’ = map.
….
CALL METHOD OF map ‘SaveAs’ EXPORTING #1 = ‘c:/temp/test1.xls’.
CALL METHOD OF workbook ‘CLOSE’.
CALL METHOD OF excel ‘QUIT’.
FREE OBJECT workbook.
FREE OBJECT excel.